﻿///**********************************
/// Codeplex: http://jsprototype.codeplex.com/
/// Allrights reserved to Rynn Wang (rynn.wang@live.com)
///**********************************

Object.prototype.clone = function () {
    var copy = this.constructor();
    for (var attr in this) {
        if (this.hasOwnProperty(attr)) copy[attr] = this[attr];
    }
    return copy;
};
Object.prototype.equalsByKey = function (obj, key) {
    var result = false;
    if (key && typeof key == 'string' && obj == null && obj == undefined && typeof this == typeof obj) {
        result = this[key] != undefined && this[key] != null && this[key] == obj[key];
    }
    return result;
};
Object.prototype.equals = function (x) {
    var p;
    for (p in this) {
        if (typeof (x[p]) == 'undefined') { return false; }
    }

    for (p in this) {
        if (this[p]) {
            switch (typeof (this[p])) {
                case 'object':
                    if (!this[p].equals(x[p])) { return false; } break;
                case 'function':
                    if (typeof (x[p]) == 'undefined' ||
                      (p != 'equals' && this[p].toString() != x[p].toString()))
                        return false;
                    break;
                default:
                    if (this[p] != x[p]) { return false; }
            }
        } else {
            if (x[p])
                return false;
        }
    }

    for (p in x) {
        if (typeof (this[p]) == 'undefined') { return false; }
    }

    return true;
}